﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using DominioSATT;
using RepositorioSATT.Conexiones;
using System.Data;

namespace RepositorioSATT
{
    public class LoginRepositorio : ILoginRepositorio, IMapeadorFila<Login>
    {
        protected Conexion conn;
        protected string sql = "";
        ///<summary>
        /// Constructor del Repositorio de Login
        ///</summary>
        public LoginRepositorio()
        {
            conn = new Conexion();
        }

        #region Miembros de ILoginRepositorio

        ///<summary>
        /// Obtiene un Objeto de Dominio de Tipo Login a partir de un Nombre de Usuario
        ///</summary>
        public Login GetLogin(string Usuario)
        {
            sql = " Select * From Login Where Usuario = '" + Usuario + "'";
            DataRow Dr = conn.Buscar(sql);
            return this.MapearTabla(Dr);
        }

        ///<summary>
        /// Obtiene un Objeto de Dominio de Tipo Login a partir de un Dni de Usuario
        ///</summary>
        public Login GetLogin(int Dni)
        {
            sql = " Select * From Login Where Dni = " + Dni;
            DataRow Dr = conn.Buscar(sql);
            return this.MapearTabla(Dr);
        }

        ///<summary>
        /// Agrega un Nuevo Login a la Base de Datos
        ///</summary>
        public void Agregar(Login Objeto)
        {
            string valores = Objeto.Dni + ",'" + Objeto.Usuario + "','" + Objeto.Password + "','" + Objeto.Estado + "'";
            conn.AgregarSinId("Login", "Dni, Usuario, Password, Estado", valores);
        }

        ///<summary>
        /// Actualiza un registro de Login de la Base de Datos
        ///</summary>
        public void Actualizar(Login Objeto)
        {
            sql = " Update Login Set Usuario = '" + Objeto.Usuario + "',Password = '" + Objeto.Password + "'," + " Estado = '" + Objeto.Estado.ToString() + "' Where Dni = " + Objeto.Dni;
            conn.ActualizarOEliminar(sql);
        }

        public int ListarEmpleados()
        {
            sql = " Select * From Persona ";
            DataTable Dt = conn.Listar(sql);
            int z = 0;
            foreach (DataRow Dr in Dt.Rows)
            {
                if (Dr["Tipo"].ToString().Contains("Empleado"))
                    z++;
            }
            return z;
        }

        #endregion

        #region Miembros de IMapeadorFila<Login>
        ///<summary>
        /// Genera un Objeto de Dominio Login a partir de un DataRow
        ///</summary>
        public Login MapearTabla(System.Data.DataRow fila)
        {
            Login retorno = null;
            if (fila != null)
            {
                retorno = new Login((fila.IsNull("Dni") == true ? 0 : Convert.ToInt32(fila["Dni"])),
                    (fila.IsNull("Usuario") == true ? string.Empty : fila["Usuario"].ToString()),
                    (fila.IsNull("Password") == true ? string.Empty : fila["Password"].ToString()),
                    (fila.IsNull("Estado") == true ? false : Convert.ToBoolean(fila["Estado"])));
            }
            return retorno;
        }

        #endregion
    }
}
